﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace CopyFilesFromM3U
{
    public partial class Principal : Form
    {

        List<string> lineas = new List<String>();

        public Principal()
        {
            InitializeComponent();
        }

        public void pgrBar_Actualizar(int porcentaje)
        {
            pgrBar.Value = porcentaje;
            lblPorcentaje.Text = porcentaje + "%";
            if (porcentaje == 100)
            {
                lblPorcentaje.Text = "Proceso Completado!";
            }
            pgrBar.Update();
            lblPorcentaje.Update();
            pgrBar.Refresh();
            lblPorcentaje.Refresh();
        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////
        private void btnLista_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            if (openFileDialog1.ShowDialog() == DialogResult.OK)
            {

                StreamReader sr = new StreamReader(openFileDialog1.FileName, Encoding.GetEncoding(1252));
                while (!sr.EndOfStream)
                {
                    lineas.Add(sr.ReadLine());
                }
                sr.Close();
            }
            txtLista.Text = openFileDialog1.FileName;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////

        private void btnDestino_Click(object sender, EventArgs e)
        {
            string targetPath = "";

            FolderBrowserDialog dialogoRuta = new FolderBrowserDialog();
            if (dialogoRuta.ShowDialog() == DialogResult.OK)
            {
                targetPath = dialogoRuta.SelectedPath;
            }
            txtDestino.Text = targetPath;
        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        private void btnProceso_Click(object sender, EventArgs e)
        {
            string rutaLista = Path.GetDirectoryName(txtLista.Text);

            Mover(lineas, rutaLista, txtLista.Text, txtDestino.Text);

        }
        ////////////////////////////////////////////////////////////////////////////////////////////////////
        public void Mover(List<String> linFich, string rutaLista, string rutaOrigen, string rutaDestino)
        {

            int cantLin = linFich.Count;
            int cont = 0;

            foreach (var cancion in linFich)
            {
                cont = cont + 1;

                if ((cancion[0] != '#') & (Path.GetExtension(cancion) == ".mp3"))
                {
                    pgrBar_Actualizar((cont * 100) / cantLin);

                    string ruta = Path.GetDirectoryName(cancion).ToString();
                    string fileName = Path.GetFileName(cancion);

                    if (ruta[1] != ':')
                    {
                        rutaOrigen = rutaLista + @"\" + Path.GetDirectoryName(cancion);
                    }
                    else
                    {
                        rutaOrigen = Path.GetDirectoryName(cancion);
                    }




                    // Creamos la ruta de origen y la de destino.
                    string sourceFile = System.IO.Path.Combine(rutaOrigen, fileName);
                    string destFile = System.IO.Path.Combine(rutaDestino, fileName);

                    // Creamos una nueva carpeta si es necesario
                    if (!System.IO.Directory.Exists(rutaDestino))
                    {
                        System.IO.Directory.CreateDirectory(rutaDestino);
                    }

                    // Copiamos el archivo a la nueva ruta, y si es necesario sustituye 
                    //al existente.
                    System.IO.File.Copy(sourceFile, destFile, true);
                }
            }


        }

        /////////////////////////////////////////////////////////////////////////////////////////

        private void txtLista_TextChanged(object sender, EventArgs e)
        {
            if ((txtLista.Text.Trim() != "") & (txtDestino.Text.Trim() != ""))
            {
                btnProceso.Enabled = true;
            }
            else
                btnProceso.Enabled = false;
        }

        private void txtDestino_TextChanged(object sender, EventArgs e)
        {
            if ((txtLista.Text.Trim() != "") & (txtDestino.Text.Trim() != ""))
            {
                btnProceso.Enabled = true;
            }
            else
                btnProceso.Enabled = false;
        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////
    }
}
